/**
 * UI管理器
 * 负责管理游戏的用户界面
 */
class UIManager {
    constructor(game) {
        // 游戏实例引用
        this.game = game;
        
        // 屏幕元素
        this.screens = {
            start: document.getElementById('start-screen'),
            game: document.getElementById('game-screen'),
            end: document.getElementById('end-screen')
        };
        
        // HUD元素
        this.hudElements = {
            wpm: document.getElementById('wpm-display'),
            accuracy: document.getElementById('accuracy-display'),
            time: document.getElementById('time-display'),
            item: document.getElementById('item-display')
        };
        
        // 当前屏幕
        this.currentScreen = null;
    }
    
    /**
     * 显示指定屏幕
     * @param {string} screenName 屏幕名称 (start, game, end)
     */
    showScreen(screenName) {
        console.log(`尝试显示${screenName}界面`);
        
        // 隐藏所有屏幕
        Object.values(this.screens).forEach(screen => {
            if (screen) {
                screen.classList.add('hidden');
            }
        });
        
        // 显示指定屏幕
        const screen = this.screens[screenName];
        if (screen) {
            screen.classList.remove('hidden');
            console.log(`显示${screenName}界面成功`);
            this.currentScreen = screenName;
            
            // 如果是开始界面，播放背景音乐
            if (screenName === 'start') {
                this.game.audioManager.playMusic('background');
            }
        } else {
            console.error(`找不到${screenName}界面元素`);
        }
    }
    
    /**
     * 更新HUD
     * @param {Object} gameData 游戏数据
     */
    updateHUD(gameData) {
        // 更新WPM显示
        if (this.hudElements.wpm) {
            this.hudElements.wpm.textContent = `${Math.round(gameData.wpm)} WPM`;
        }
        
        // 更新正确率显示
        if (this.hudElements.accuracy) {
            this.hudElements.accuracy.textContent = `${Math.round(gameData.accuracy)}%`;
        }
        
        // 更新时间显示
        if (this.hudElements.time) {
            this.hudElements.time.textContent = this.formatTime(gameData.elapsedTime);
        }
    }
    
    /**
     * 格式化时间
     * @param {number} seconds 秒数
     * @returns {string} 格式化后的时间字符串 (MM:SS)
     */
    formatTime(seconds) {
        const minutes = Math.floor(seconds / 60);
        const remainingSeconds = Math.floor(seconds % 60);
        return `${minutes.toString().padStart(2, '0')}:${remainingSeconds.toString().padStart(2, '0')}`;
    }
    
    /**
     * 显示游戏结束界面
     * @param {boolean} success 是否成功
     * @param {Object} stats 游戏统计数据
     */
    showGameOver(success, stats) {
        // 设置结果标题
        const resultElement = document.getElementById('game-result');
        if (resultElement) {
            resultElement.textContent = success ? '恭喜完成！' : '被警察抓住了！';
        }
        
        // 更新统计数据
        document.getElementById('final-wpm').textContent = `${Math.round(stats.wpm)} WPM`;
        document.getElementById('final-accuracy').textContent = `${Math.round(stats.accuracy)}%`;
        document.getElementById('final-time').textContent = this.formatTime(stats.time);
        document.getElementById('final-score').textContent = stats.score;
        
        // 显示结束界面
        this.showScreen('end');
    }
    
    /**
     * 显示鼓励文字
     * @param {string} text 文字内容
     */
    showEncouragement(text) {
        const gameScene = document.getElementById('game-scene');
        
        if (!gameScene) return;
        
        // 创建鼓励文字元素
        const encouragement = document.createElement('div');
        encouragement.className = 'encouragement';
        encouragement.textContent = text;
        
        // 添加到游戏场景
        gameScene.appendChild(encouragement);
        
        // 动画结束后移除元素
        encouragement.addEventListener('animationend', () => {
            if (encouragement.parentNode) {
                encouragement.parentNode.removeChild(encouragement);
            }
        });
    }
    
    /**
     * 显示结束界面
     * @param {boolean} success 是否成功
     * @param {number} wpm 打字速度
     * @param {number} accuracy 准确率
     * @param {number} time 游戏时间
     * @param {number} score 得分
     */
    showEndScreen(success, wpm, accuracy, time, score) {
        console.log(`显示结束界面: 成功=${success}, WPM=${wpm}, 准确率=${accuracy}%, 时间=${time}秒, 得分=${score}`);
        
        // 显示结束界面
        this.showScreen('end');
        
        // 确保结束界面元素存在
        const endScreen = document.getElementById('end-screen');
        if (!endScreen) {
            console.error('找不到结束界面元素');
            return;
        }
        
        // 移除隐藏类
        endScreen.classList.remove('hidden');
        
        // 更新统计数据
        const finalWpm = document.getElementById('final-wpm');
        if (finalWpm) finalWpm.textContent = `${wpm} WPM`;
        
        const finalAccuracy = document.getElementById('final-accuracy');
        if (finalAccuracy) finalAccuracy.textContent = `${accuracy}%`;
        
        const finalTime = document.getElementById('final-time');
        if (finalTime) finalTime.textContent = this.formatTime(time);
        
        const finalScore = document.getElementById('final-score');
        if (finalScore) finalScore.textContent = score;
        
        // 设置结果类型
        const resultElement = document.getElementById('game-result');
        if (resultElement) {
            resultElement.textContent = success ? '成功逃脱！' : '被警察抓住了！';
            resultElement.className = success ? 'success-result' : 'fail-result';
        }
        
        // 确保按钮事件正确绑定
        this.bindEndScreenButtons();
    }
    
    /**
     * 绑定结束界面按钮事件
     */
    bindEndScreenButtons() {
        console.log('绑定结束界面按钮事件');
        
        const restartBtn = document.getElementById('restart-btn');
        const homeBtn = document.getElementById('home-btn');
        
        if (restartBtn) {
            // 清除所有现有事件监听器
            const newRestartBtn = restartBtn.cloneNode(true);
            restartBtn.parentNode.replaceChild(newRestartBtn, restartBtn);
            
            // 添加新的事件监听器
            newRestartBtn.addEventListener('click', () => {
                console.log('点击重新开始按钮');
                // 重置游戏状态
                this.game.reset();
                // 启动新游戏
                setTimeout(() => {
                    // 播放游戏背景音乐
                    this.game.audioManager.playMusic('startGame');
                    this.game.start();
                }, 100);
            });
        } else {
            console.error('找不到重新开始按钮');
        }
        
        if (homeBtn) {
            // 清除所有现有事件监听器
            const newHomeBtn = homeBtn.cloneNode(true);
            homeBtn.parentNode.replaceChild(newHomeBtn, homeBtn);
            
            // 添加新的事件监听器
            newHomeBtn.addEventListener('click', () => {
                console.log('点击返回主页按钮');
                // 重置游戏状态
                this.game.reset();
                // 显示开始界面
                setTimeout(() => {
                    this.showScreen('start');
                    
                    // 播放主界面背景音乐
                    this.game.audioManager.playMusic('background');
                }, 100);
            });
        } else {
            console.error('找不到返回主页按钮');
        }
    }
} 